package zmee.pur.src.formplugin;

import kd.bos.bill.BillShowParameter;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.form.ShowType;
import kd.bos.form.events.BeforeCreateListColumnsArgs;
import kd.bos.form.events.BillListHyperLinkClickEvent;
import kd.bos.form.events.HyperLinkClickArgs;
import kd.bos.form.events.SetFilterEvent;
import kd.bos.list.BillList;
import kd.bos.list.IListColumn;
import kd.bos.list.plugin.AbstractListPlugin;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.QueryServiceHelper;

import java.util.*;

/**
 * @Author: zyj
 * @Date: 2023/6/26 15:14
 * @Description: 回标详情f7列表: 通过供应商回标数据按钮显示的回标详情列表
 */
public class SrcBidopensupplShowDetailListPlugin extends AbstractListPlugin {

    // 用来存放需要展示的列对象
    protected Set<String> showColumns;

    @Override
    public void setFilter(SetFilterEvent e) {
        super.setFilter(e);
        List<QFilter> qFilters = e.getQFilters();
        // 获取由供应商跳转过来传递的供应商id
        Long supplierId = this.getView().getFormShowParameter().getCustomParam("supplierId");
        if (supplierId != null) {
            // 设置过滤条件 供应商id
            QFilter qFilter = new QFilter("supplier", QCP.equals, supplierId);
            qFilters.add(qFilter);
            e.setCustomQFilters(qFilters);
        }
    }



    @Override
    public void beforeCreateListColumns(BeforeCreateListColumnsArgs args) {
        // 目的: 供应商中内嵌的回标详情列表隐藏相应列，只显示我想要的列
        // 获取状态 通过这个来识别是不是由供应商来的
        super.beforeCreateListColumns(args);
        String state = this.getView().getFormShowParameter().getCustomParam("state");
        if (state != null) {
            if ("supplier".equals(state)) {
                // 初始化列数据
                initShowData();
                List<IListColumn> lists = args.getListColumns();
                for (IListColumn list : lists) {
                    String listFieldKey = list.getListFieldKey();
                    // 把不是我想要展示的列数据隐藏
                    if (!showColumns.contains(listFieldKey)) {
                        list.setVisible(0);
                    }
                }
            }
        }
    }

    @Override
    public void billListHyperLinkClick(HyperLinkClickArgs args) {
        // 目的: 供应商内嵌的回标详情列表支持超链接，点击寻源项目编号找到寻源项目
        // 获取状态 通过这个来识别是不是由供应商或者物料来的
        String state = this.getView().getFormShowParameter().getCustomParam("state");
        if (state != null) {
            // 供应商 物料
            if ("supplier".equals(state)) {
                // 判断是不是有单据编码产生的超链接事件
                if ("billid_billno".equals(args.getFieldName()) && args.getHyperLinkClickEvent() instanceof BillListHyperLinkClickEvent) {
                    // 先取消原有的操作
                    args.setCancel(true);

                    BillListHyperLinkClickEvent linkClickEvent = (BillListHyperLinkClickEvent) args.getHyperLinkClickEvent();
                    BillList billList = (BillList) args.getHyperLinkClickEvent().getSource();
                    // 获取单据标识
                    String billFormId = billList.getBillFormId();
                    // 获取单据的pkid
                    Object primaryKeyValue = linkClickEvent.getCurrentRow().getPrimaryKeyValue();
                    // 查询选中的单据数据
                    DynamicObject bidopensupplObj = BusinessDataServiceHelper.loadSingle(primaryKeyValue, billFormId);
                    // 获取寻源项目
                    DynamicObject billid = bidopensupplObj.getDynamicObject("billid");
                    // 获取寻源项目编号
                    String billno = billid.getString("billno");
                    QFilter qFilter = new QFilter("billno", QCP.equals, billno);
                    // 通过寻源项目编码去查询项目启动单
                    DynamicObjectCollection src_project = QueryServiceHelper.query("src_project", "id, billno, bidname", new QFilter[]{qFilter});
                    if (src_project == null || src_project.size() != 1) {
                        this.getView().showTipNotification("当前寻源项目编码重复多个项目，请检查寻源项目编码！");
                        return;
                    }
                    DynamicObject project = src_project.get(0);

                    // 构造一个BillShowParameter
                    BillShowParameter billShowParameter = new BillShowParameter();
                    // 设置跳转的单据标识
                    billShowParameter.setFormId("src_project");
                    // 设置待跳转的单据pkid
                    billShowParameter.setPkId(project.get("id"));
                    // 设置打开方式
                    billShowParameter.getOpenStyle().setShowType(ShowType.Modal);

                    getView().showForm(billShowParameter);
                }
            }
        }
    }

    /**
     * 加载需要展示的列
     */
    protected void initShowData() {
        showColumns = new HashSet<>();
        showColumns.add("billid.billno");
        showColumns.add("billid.bidname");
        showColumns.add("supplier.name");
        showColumns.add("isconfirm");
        showColumns.add("istender");
    }
}
